package net.servir.capacidades.web.controller;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import net.servir.capacidades.model.BancoPregunta;
import net.servir.capacidades.model.CONSTANT;
import net.servir.capacidades.model.FuncionLeyenda;
import net.servir.capacidades.model.Pregunta;
import net.servir.capacidades.model.PreguntaServicio;
import net.servir.capacidades.model.PreguntaTipo;
import net.servir.capacidades.model.SectorPregunta;
import net.servir.capacidades.model.Usuario;
import net.servir.capacidades.model.Enumerados.GrupoDatosMaestro;
import net.servir.capacidades.model.jsp.JspPreguntas;
import net.servir.capacidades.model.xls.XlsWorkbookConfig;
import net.servir.capacidades.service.BancoPreguntaService;
import net.servir.capacidades.service.CapacidadesService;
import net.servir.capacidades.service.MantenimientoService;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class PreguntasController {

	@Autowired 
	private CapacidadesService capacidadesService;
	
	@Autowired 
	private BancoPreguntaService bancoPreguntaService;

	@Autowired 
	private MantenimientoService mantenimientoService;

	
	@RequestMapping("/preguntas.htm")
	public @ModelAttribute("preguntas")
	JspPreguntas preguntaBusqueda(HttpServletRequest request) throws Exception {
		
		JspPreguntas obj = new JspPreguntas();
		
		//************************************************************
		// se obtiene el dni de la session activa
		//************************************************************
		
		HttpSession session = request.getSession();
		String cod_session =session.getId();

		String dniResponsable = null;
		if(session.getAttribute("dni") != null)			
			dniResponsable = session.getAttribute("dni").toString();
		else
			throw new Exception("No hay sesion activa");
		
		//Obtenemos los datos del Usuario
		Usuario usuario = null;
		if(session.getAttribute("usuario") != null)			
			usuario = (Usuario)session.getAttribute("usuario");
		
		if (usuario == null)
			throw new Exception("No se ha identificado al usuario");
		
		obj.setUsuario(usuario);				
		//************************************************************

		Number idPregunta = null;
		Number idBancoPregunta = null;
		Number idSistema = null;
		String accion = null;
		String mensajeUsuario = "";
		
		XlsWorkbookConfig xlsWorkbookConfig = new XlsWorkbookConfig(); 
		BancoPregunta bancoPregunta = new BancoPregunta();
		
		
		if (request.getParameter("id_banco_pregunta")!= null && !request.getParameter("id_banco_pregunta").equals(""))
		{
			idBancoPregunta = Integer.parseInt(request.getParameter("id_banco_pregunta"));
			bancoPregunta = bancoPreguntaService.getBancoPregunta(idBancoPregunta);
			idSistema = bancoPregunta.getId_sistema();
			obj.setId_sistema(idSistema);
		}

			
		List<FuncionLeyenda> lstFuncion = mantenimientoService.getFuncionesPorSistema(idSistema,GrupoDatosMaestro.PARA_PREGUNTAS);
		List<SectorPregunta> lstSectorPregunta = mantenimientoService.getSectoresPregunta(GrupoDatosMaestro.PARA_PREGUNTAS);
		List<PreguntaTipo> lstPreguntaTipo = mantenimientoService.getPreguntaTipos(idSistema);
		List<PreguntaServicio> lstPreguntaServicio = mantenimientoService.getPreguntasServicio(idSistema);

		//Recuperamos los parametros de busqueda
		String pregunta= request.getParameter("pregunta");
		Number idSectorPregunta = null;
		if (request.getParameter("id_sector_pregunta")!= null && !request.getParameter("id_sector_pregunta").equals(""))
			idSectorPregunta = Integer.parseInt(request.getParameter("id_sector_pregunta"));
		Number idFuncion = null;
		if (request.getParameter("id_funcion")!= null && !request.getParameter("id_funcion").equals(""))
			idFuncion = Integer.parseInt(request.getParameter("id_funcion"));
		Number idPreguntaTipo = null;
		if (request.getParameter("id_pregunta_tipo")!= null && !request.getParameter("id_pregunta_tipo").equals(""))
			idPreguntaTipo = Integer.parseInt(request.getParameter("id_pregunta_tipo"));
		Number idPreguntaServicio = null;
		if (request.getParameter("id_pregunta_servicio")!= null && !request.getParameter("id_pregunta_servicio").equals(""))
			idPreguntaServicio = Integer.parseInt(request.getParameter("id_pregunta_servicio"));
		Number estado = 1;
		if (request.getParameter("estado")!= null && !request.getParameter("estado").equals(""))
			estado = Integer.parseInt(request.getParameter("estado"));
		else
			obj.setEstado(estado);
		

		//String codEstadoParticipante = null;
		// obtener valores del accion de usuario

		accion = request.getParameter("accion");
		
		if (accion!= null && !accion.equals(""))
		{
			obj.setPregunta(pregunta);
			obj.setId_nivel_gobierno(idSectorPregunta);
			obj.setId_funcion(idFuncion);
			obj.setId_pregunta_tipo(idPreguntaTipo);
			obj.setId_pregunta_servicio(idPreguntaServicio);
			obj.setEstado(estado);
			
			if (accion.equals("CAMBIAR_ESTADO"))			
			{
				if (request.getParameter("id_pregunta") != null && !request.getParameter("id_pregunta").equals(""))
				{
					idPregunta = Integer.parseInt(request.getParameter("id_pregunta"));
					bancoPreguntaService.cambiarEstadoPregunta(idPregunta);
					
					/*mensajeUsuario =  bancoPreguntaService.validarEliminarPregunta(idPregunta);
					if (mensajeUsuario.equals(""))
					{
						bancoPreguntaService.eliminarPregunta(idPregunta);
						//lstPregunta = bancoPreguntaService.getPreguntas(idBancoPregunta);
						//obj.setLstPregunta(lstPregunta);
					}*/
				}
			}
		}
		
		//Seteamos las variables a devolver
		obj.setId_banco_pregunta(idBancoPregunta);
		
		List<Pregunta> lstPregunta = bancoPreguntaService.getPreguntasFiltro(obj,xlsWorkbookConfig);
		
		obj.setLstPregunta(lstPregunta);
		obj.setLstFuncion(lstFuncion);
		obj.setLstSectorPregunta(lstSectorPregunta);
		obj.setLstPreguntaTipo(lstPreguntaTipo);
		obj.setLstPreguntaServicio(lstPreguntaServicio);
		
		//Guardamos en la variable de session lo que se va a exportar
		session.setAttribute(CONSTANT.KEY_CFG_EXCEL_EXPORT, xlsWorkbookConfig);
		
		obj.setMensaje_usuario(mensajeUsuario);
		// set valores de los controles
		request.setAttribute("DATALIST", lstPregunta);	
		return obj;
	}
}
